package br.com.lucasddaniel.merchanmobile.util;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;

/**
 * Classe com métodos geralmente utilizados.
 * 
 * @author dsouza
 * 
 */
public class UtilData {

    public static final String dateFormat = "yyyy-MM-dd HH:mm:ss";

    /**
     * Formata a data
     * 
     * @param value
     * @return string -> retorna a string de data no formato yyyy-MM-dd HH:mm:ss Se ocorrer uma
     *         exceção ou a data for nula retorna 0001-01-01 00:00:00
     */
    public static String formatDateTime(Date value) {
        try {
            if (value != null) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
                return simpleDateFormat.format(value);
            }
        } catch (Exception e) {
        }
        return "0001-01-01 00:00:00";
    }

    /**
     * Formata a data
     * 
     * @param value
     * @param format
     * @return string -> retorna a string de data no formato: fomat Se ocorrer uma exceção ou a
     *         data for nula retorna ""
     */
    public static String formatDateTime(Date value, String format) {
        try {
            if (value != null) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
                return simpleDateFormat.format(value);
            }
        } catch (Exception e) {
        }
        return "";
    }

    /**
     * Formata a data
     * 
     * @param value
     * @return string -> retorna a string de data no formato yyyy-MM-dd HH:mm:ss Se ocorrer uma
     *         exceção ou a data for nula retorna null
     */
    public static Date formatDateTime(String value) {

        try {
            if (value != null) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
                return simpleDateFormat.parse(value);
            }
        } catch (Exception e) {
        }
        return null;
    }

    /**
     * Formata a data
     * 
     * @param value
     * @return string -> retorna a string de data no formato dd/MM/yyyy HH:mm Se ocorrer uma
     *         exceção ou a data for nula retorna null
     */
    public static String printDate(Date value) {
        try {
            if (value != null) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
                return simpleDateFormat.format(value);
            }
        } catch (Exception e) {
        }
        return null;
    }

    /**
     * Formata a data
     * 
     * @param value
     * @return string retorna o value formatado #,###,##0.00
     */
    public static String getValueRS(Float value) {

        DecimalFormat df = new DecimalFormat("#,###,##0.00");
        String valueTxt = df.format(value);

        return valueTxt;
    }

    /**
     * Converte uma string para um Integer
     * 
     * @param value
     * @return Integer string convertida, caso não seja convertida retorna null
     */
    public static Integer getInt(String value) {
        try {
            return Integer.parseInt(value);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * Converte uma string para um Integer
     * 
     * @param value
     * @return Integer string convertida, caso não seja convertida retorna -1
     */
    public static Integer getIntToUpload(String value) {
        try {
            return Integer.parseInt(value);
        } catch (Exception e) {
            return -1;
        }
    }

    /**
     * Converte uma string para um Float
     * 
     * @param value
     * @return Integer string convertida, caso não seja convertida retorna null
     */
    public static Float getFloat(String value) {
        try {
            return Float.parseFloat(value);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * Converte uma string para um Float
     * 
     * @param value
     * @return Integer string convertida, caso não seja convertida retorna null
     */
    public static Float getFloatToUpload(String value) {
        try {
            return Float.parseFloat(value);
        } catch (Exception e) {
            return -1f;
        }
    }

    /**
     * Verifica se há modificações nas activities
     * 
     * @param activityChangesMap
     * @param activitiesToVerify
     * @return boolean true se alguma das actvities tiveram modificações false caso contrário
     */
    public static boolean hasChanges(HashSet<String> activityChangesMap, String[] activitiesToVerify) {
        if (activityChangesMap == null || activityChangesMap.size() == 0) {
            return false;
        }

        for (String str : activitiesToVerify) {
            if (activityChangesMap.contains(str)) {
                return true;
            }
        }

        return false;

    }

    /**
     * @param str
     * @return string se a string for nula retorna "", caso contrário retorna a própria string
     */
    public static String showString(String str) {
        if (str == null) {
            return "";
        }
        return str;
    }

}
